import { ElMessage } from 'element-plus';

// 连接 WebSocket
export const connectWebSocket = (senderId, role) => {
    return new Promise((resolve, reject) => {
        // 在 WebSocket URL 中附带参数
        const ws = new WebSocket(`ws://10.34.78.186:18080/disputes/chat?senderId=${senderId}&role=${role}`);

        ws.onopen = () => {
            console.log('WebSocket 连接成功');

            // 开始发送心跳
            startHeartbeat(ws);
            resolve(ws);
        };

        ws.onerror = (error) => {
            console.error('WebSocket 连接失败:', error);
            ElMessage.error(`WebSocket 连接失败: ${error.message}`);
        };

        ws.onclose = () => {
            console.log('WebSocket 已关闭，重新连接中...');
            setTimeout(() => {
                connectWebSocket(senderId, role); // 重新连接
            }, 5000);  // 5秒后尝试重新连接
        };

        // 用户不主动发送信息，被动接受用户信息并解析：
        ws.onmessage = (event) => {
            try {
                const messageData = JSON.parse(event.data);
                console.log('收到的消息:', messageData);  // 打印接收到的消息，确认格式和内容
                if (messageData.type === 'CHAT') {
                    // 在 Vue 组件中调用 handleIncomingMessage
                    handleIncomingMessage(messageData);
                }
            } catch (e) {
                console.error('消息解析失败:', e);
            }
        };
    });
};

// 处理接收到的用户消息
const handleIncomingMessage = (messageData) => {
    const { receiverId, orderId, taskId, disputeId, userId, adminId, content, imageUrl } = messageData;

    // 打印消息内容，确保正确接收
    console.log(`收到用户消息: ${content}`);
    console.log(`消息字段: receiverId=${receiverId}, orderId=${orderId}, taskId=${taskId}, disputeId=${disputeId}, userId=${userId}, adminId=${adminId}`);

    // 处理展示逻辑
    ElMessage.info(`收到来自用户(${userId})的消息: ${content}`);

    // 如果有图片 URL，可能需要在 UI 上展示图片
    if (imageUrl) {
        // 在 UI 中显示图片
        console.log(`图片URL: ${imageUrl}`);
    }

    // 将收到的消息推送到 messages 数组中
    // 你需要确保 this 指向 Vue 组件实例，可能通过 Vue 中的实例方法传入。
    // 在 Vue 组件中的调用应为 `this.messages.push({...})`
};

// WebSocket连接成功后发送心跳
export const startHeartbeat = (ws) => {
    const heartbeatInterval = 30000; // 设置心跳间隔（30秒）

    // 发送心跳
    const heartbeat = () => {
        if (ws.readyState === WebSocket.OPEN) {
            ws.send(JSON.stringify({ type: 'PING' }));
            console.log('发送心跳');
        }
    };

    // 每隔 heartbeatInterval 毫秒发送一次心跳
    const interval = setInterval(heartbeat, heartbeatInterval);

    // 如果连接关闭，清除心跳定时器
    ws.onclose = () => {
        console.log('WebSocket 连接已关闭，停止发送心跳');
        clearInterval(interval);
    };
};


// 添加发送消息函数
export const sendMessage = (ws, messageData) => {
    if (ws && ws.readyState === WebSocket.OPEN) {
        const messageString = JSON.stringify(messageData);
        ws.send(messageString);
        console.log('发送的消息:', messageData);
    } else {
        console.error('WebSocket 未连接或未打开');
        ElMessage.error('消息发送失败：WebSocket 未连接');
    }
};
